﻿#region NeoPatterns
// 
// NeoPatterns framework is released under LGPLv3 license.
// See http://www.opensource.org/licenses/lgpl-3.0.html for more details.
// 
// Please visit http://neopatterns.wikidot.com for more information about NeoPatterns
// 
// Copyright (c) Pascal Craponne 2008
// 
#endregion

using System.Reflection;

namespace NeoPatterns.Core.Aop
{
    /// <summary>
    /// Represents a call to original method
    /// </summary>
    public interface IInvocation
    {
        /// <summary>
        /// Gets or sets arguments
        /// </summary>
        object[] Parameters { get; }

        /// <summary>
        /// Optional value returned by called method
        /// </summary>
        object ReturnValue { get; set; }

        /// <summary>
        /// Call target object
        /// </summary>
        object Target { get; }

        /// <summary>
        /// Invoked method
        /// </summary>
        MethodInfo TargetMethod { get; }

        /// <summary>
        /// Passes invocation to next advisor or target
        /// </summary>
        void Proceed();
    }
}